/**
 * API请求基础层
 * 支持模拟后端和真实后端切换
 */

const config = {
  useServerBackend: true, // 修改为true，使用真实服务器
  apiBaseUrl: 'http://127.0.0.1:5002/api', // 指向本地后端API
  mockDelay: 300, // 模拟响应延迟时间(ms)
};

// 获取授权头
function getAuthHeader() {
  const token = wx.getStorageSync('token');
  return {
    'content-type': 'application/json',
    'Authorization': token ? `Bearer ${token}` : '',
  };
}

/**
 * 发送请求
 * @param {string} endpoint - API端点
 * @param {string} method - 请求方法(GET, POST, PUT, DELETE)
 * @param {object} data - 请求数据
 * @returns {Promise} - 返回Promise对象
 */
function request(endpoint, method, data) {
  console.log(`[API] ${method} ${endpoint}`, data);
  
  if (config.useServerBackend) {
    // 使用真实服务器
    return new Promise((resolve, reject) => {
      wx.request({
        url: `${config.apiBaseUrl}${endpoint}`,
        method: method,
        data: data,
        header: getAuthHeader(),
        success: res => {
          console.log(`[API] Response:`, res.data);
          if (res.statusCode >= 200 && res.statusCode < 300) {
            resolve(res.data);
          } else {
            console.error(`[API] Error:`, res);
            reject({
              code: res.statusCode,
              message: res.data.message || '请求失败',
              data: res.data
            });
          }
        },
        fail: err => {
          console.error(`[API] Network Error:`, err);
          reject({
            code: -1,
            message: '网络请求失败',
            error: err
          });
        }
      });
    });
  } else {
    // 使用模拟服务器
    return mockRequest(endpoint, method, data);
  }
}

/**
 * 模拟请求处理
 */
function mockRequest(endpoint, method, data) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      try {
        // 导入模拟服务处理模块
        const mockService = require('./mock.js');
        const result = mockService.process(endpoint, method, data);
        
        console.log(`[Mock API] Response:`, result);
        
        if (result.error) {
          reject(result);
        } else {
          resolve(result);
        }
      } catch (err) {
        console.error(`[Mock API] Error:`, err);
        reject({
          code: 500,
          message: '模拟服务器错误',
          error: err.message
        });
      }
    }, config.mockDelay);
  });
}

/**
 * 配置API设置
 */
function configure(options) {
  Object.assign(config, options);
  console.log(`[API] Configuration updated:`, config);
}

// 导出API请求方法
module.exports = {
  get: (endpoint, data) => request(endpoint, 'GET', data),
  post: (endpoint, data) => request(endpoint, 'POST', data),
  put: (endpoint, data) => request(endpoint, 'PUT', data),
  delete: (endpoint, data) => request(endpoint, 'DELETE', data),
  configure,
  config
}; 